{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "db223180",
   "metadata": {},
   "source": [
    "3522. 执行指令后的得分 显示英文描述 \n",
    "通过的用户数1656\n",
    "尝试过的用户数1771\n",
    "用户总通过次数1714\n",
    "用户总提交次数3062\n",
    "题目难度Medium\n",
    "给你两个数组：instructions 和 values，数组的长度均为 n。\n",
    "\n",
    "你需要根据以下规则模拟一个过程：\n",
    "\n",
    "从下标 i = 0 的第一个指令开始，初始得分为 0。\n",
    "如果 instructions[i] 是 \"add\"：\n",
    "将 values[i] 加到你的得分中。\n",
    "移动到下一个指令 (i + 1)。\n",
    "如果 instructions[i] 是 \"jump\"：\n",
    "移动到下标为 (i + values[i]) 的指令，但不修改你的得分。\n",
    "当以下任一情况发生时，过程会终止：\n",
    "\n",
    "越界（即 i < 0 或 i >= n），或\n",
    "尝试再次执行已经执行过的指令。被重复访问的指令不会再次执行。\n",
    "返回过程结束时的得分。\n",
    "\n",
    " \n",
    "\n",
    "示例 1：\n",
    "\n",
    "输入： instructions = [\"jump\",\"add\",\"add\",\"jump\",\"add\",\"jump\"], values = [2,1,3,1,-2,-3]\n",
    "\n",
    "输出： 1\n",
    "\n",
    "解释：\n",
    "\n",
    "从下标 0 开始模拟过程：\n",
    "\n",
    "下标 0：指令是 \"jump\"，移动到下标 0 + 2 = 2。\n",
    "下标 2：指令是 \"add\"，将 values[2] = 3 加到得分中，移动到下标 3。得分变为 3。\n",
    "下标 3：指令是 \"jump\"，移动到下标 3 + 1 = 4。\n",
    "下标 4：指令是 \"add\"，将 values[4] = -2 加到得分中，移动到下标 5。得分变为 1。\n",
    "下标 5：指令是 \"jump\"，移动到下标 5 + (-3) = 2。\n",
    "下标 2：已经访问过。过程结束。\n",
    "示例 2：\n",
    "\n",
    "输入： instructions = [\"jump\",\"add\",\"add\"], values = [3,1,1]\n",
    "\n",
    "输出： 0\n",
    "\n",
    "解释：\n",
    "\n",
    "从下标 0 开始模拟过程：\n",
    "\n",
    "下标 0：指令是 \"jump\"，移动到下标 0 + 3 = 3。\n",
    "下标 3：越界。过程结束。\n",
    "示例 3：\n",
    "\n",
    "输入： instructions = [\"jump\"], values = [0]\n",
    "\n",
    "输出： 0\n",
    "\n",
    "解释：\n",
    "\n",
    "从下标 0 开始模拟过程：\n",
    "\n",
    "下标 0：指令是 \"jump\"，移动到下标 0 + 0 = 0。\n",
    "下标 0：已经访问过。过程结束。\n",
    " \n",
    "\n",
    "提示：\n",
    "\n",
    "n == instructions.length == values.length\n",
    "1 <= n <= 105\n",
    "instructions[i] 只能是 \"add\" 或 \"jump\"。\n",
    "-105 <= values[i] <= 105"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "77c01f79",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Solution:\n",
    "    def calculateScore(self, instructions: List[str], values: List[int]) -> int:\n",
    "        i = 0\n",
    "        score = 0\n",
    "        visit = set()\n",
    "        n = len(instructions)\n",
    "        \n",
    "        while 0 <= i < n and i not in visit:\n",
    "            visit.add(i)\n",
    "            if instructions[i] == 'add':\n",
    "                score += values[i]\n",
    "                i += 1\n",
    "            elif instructions[i] == 'jump':\n",
    "                i += values[i]\n",
    "        return score\n",
    "                \n",
    "                "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "env_py38",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.8.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
